package cn.amebius.code;

/**
 * @Author 阿伟
 * @Date 2022/10/11 9:45
 */
/*
    来源：力扣（LeetCode）
    链接：https://leetcode.cn/problems/check-if-one-string-swap-can-make-strings-equal
    给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下：选出某个字符串中的两个下标（不必不同），并交换这两个下标所对应的字符。
    如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等，返回 true ；否则，返回 false 。

    输入：s1 = "bank", s2 = "kanb"
    输出：true
    解释：例如，交换 s2 中的第一个和最后一个字符可以得到 "bank"

    输入：s1 = "attack", s2 = "defend"
    输出：false
    解释：一次字符串交换无法使两个字符串相等

    输入：s1 = "kelb", s2 = "kelb"
    输出：true
    解释：两个字符串已经相等，所以不需要进行字符串交换

    输入：s1 = "abcd", s2 = "dcba"
    输出：false

    提示：
        1 <= s1.length, s2.length <= 100
        s1.length == s2.length
        s1 和 s2 仅由小写英文字母组成

   思路：
        双指针，直接判断有一个返回true，多了就返回false，break
 */
public class 仅执行一次字符串交换能否使两个字符串相等1790 {
    public static void main(String[] args) {
        String s1 = "attack";
        String s2 = "defend";
        System.out.println(areAlmostEqual(s1,s2));
    }
    static public boolean areAlmostEqual(String s1, String s2) {
        int flag = 0;
        int potOne = 0, potTwo = 0;
        int len = s1.length();
        while (potOne < len) {
            if (s1.charAt(potOne) != s2.charAt(potOne)) {
                potTwo = potOne + 1;
                while (potTwo < len) {
                    if (s2.charAt(potTwo) == s1.charAt(potOne)) {
                        break;
                    }
                    potTwo++;
                }
                if (potTwo != len) {
                    if (flag == 0) {
                        flag = 1;
                    } else {
                        flag = -1;
                        break;
                    }
                } else {
                    flag = -1;
                }
            }
            potOne++;
        }
        if (flag == 1 || flag == 0) {
            return true;
        } else {
            return false;
        }
    }
}
